*October 2019
*Replication do-file
*Jeuland et al. Preferences and the effectiveness of behavior-change interventions

****Descriptives and balance tests (Table 2)

cd "H:\Cook stove research\Stoves TRAC\Impacts analysis\Latent class analysis\Submissions\JAERE\Replication files"

use "H:\Cook stove research\Stoves TRAC\Impacts analysis\Latent class analysis\Submissions\JAERE\Replication files\JAERE_data.dta"

log using balancechecks.log, replace

global balancevarsfull pavedroads docdist bankfac chirag_strata hhsize childu5_count ///
 age_hh educhh educpc female_hh respmain_hh respmain_pc BPL hindu caste_general scst ///
 Sick_2wks_pcnt relativewlth credit save_possible elec_const intermit electricityhr ///
 ln_expend cellphone rooms toilet agri_land mostpatient mostrisk cleanstove_aware ///
 cleanfuel_aware medorbetterimpact medorbetterimpact1 medorbetterimpact2 medorbetterimpact3 ///
 smoke_unsafe tradstove impstove hr_tradst hr_cleanst fuel_fwd fuel_kero fuel_lpg ///
 fuel_elec fuel_biog fuel_fwdkg tradfcollHR priceLPG pricefwd ///
 totalfuelexp class1 class2 class3
 
sum $balancevarsfull if surveyround == 0
sum $balancevarsfull if treatment == 1 & surveyround == 0
sum $balancevarsfull if treatment == 0 & surveyround == 0

sum $balancevarsfull if surveyround == 0 & lostin2013 ~= 1
sum $balancevarsfull if treatment == 1 & surveyround == 0 & lostin2013 ~= 1
sum $balancevarsfull if treatment == 0 & surveyround == 0 & lostin2013 ~= 1

sum electricityhr if electricityhr ~= 0 & electricityhr ~=24 & surveyround == 0
sum hr_cleanst if impstove == 1 & surveyround == 0

sum electricityhr if electricityhr ~= 0 & electricityhr ~=24 & surveyround == 0 & lostin2013 ~= 1
sum hr_cleanst if impstove == 1 & surveyround == 0 & lostin2013 ~= 1

*Balance tests by (treatment) - For Table 2

iebaltab $balancevarsfull if surveyround == 0, grpvar(treatment) vce(cluster uniquegrp) normdiff save("balancetable1.xlsx")

foreach var of varlist $balancevarsfull {
	reg `var' treatment if surveyround == 0, vce(cl uniquegrp) 
	} 

reg lostin2013 treatment if surveyround == 0, vce(cl uniquegrp)

log close

clear


****Preferences

**Mixlogit (Table 3): Load dataset where each choice task is a row - multiple observations per respondent

use "H:\Cook stove research\Stoves TRAC\Impacts analysis\Latent class analysis\Submissions\JAERE\Replication files\conjoint_mixlogitfinal.dta", clear

log using mixlogit.log, replace

replace price = price/500

gen trad = 0
replace trad = 1 if smoke == 3

*With fixed price
global randvars "fuel smoke pots trad"
mixlogit cchoice2 price if testcorrect == 1 & state_code == 5, rand($randvars) ///
	group(gid2) id(finalid) nrep(50)
	
*With lognormal price
gen mprice = -price
global randvars "fuel smoke pots trad mprice"
mixlogit cchoice2 if testcorrect == 1 & state_code == 5, rand($randvars) ///
	group(gid2) id(finalid) nrep(50) ln(1)

clear

log close

**Latent class logit - see latent gold replication files (Table 4)

****Determinants of preference class (Table 5)

use "H:\Cook stove research\Stoves TRAC\Impacts analysis\Latent class analysis\Submissions\JAERE\Replication files\JAERE_data.dta"

log using determs_Table6.log, replace

global classdets chirag_strata hhsize childu5 age_hh educhh educpc female_hh respcj_pc ///
	caste_general Sick_2wks_pcnt relativewlth credit save_possible toilet mostpatient mostrisk ///
	cleanstove_aware medorbetterimpact smoke_unsafe impstove hr_tradst tradfcollog pricefwdH  

mlogit class_new $classdets if surveyround == 0 & lostin2013 ~= 1, cluster(uniquegrp) base(3)
outreg2 using classdet, se excel append slow(500)

*Fill in missings
foreach var of global classdets {	
	bysort surveyround uniquegrp: egen med`var' = median(`var')
	replace `var' = med`var' if `var' == . & surveyround == 0
	drop med`var'
	}

mlogit class_new $classdets if surveyround == 0 & lostin2013 ~= 1, cluster(uniquegrp) base(3)
outreg2 using classdet, se excel append slow(500)

erase classdet.txt

log close


****Main analyses

global basicvar age_hh female_hh educhh relativewlth electricityhr pricefwdH   
global addvar caste_general educpc hhsize childu5 credit save_possible toilet medorbetterimpact Sick_2wks_pcnt smoke_unsafe cleanstove_aware hr_tradst tradfcollog mostpatient mostrisk 

*Use baseline values for most covariates, unless only have follow-up measures
global covars relativewlth credit save_possible toilet female_hh medorbetterimpact cleanstove_aware hr_tradst tradfcollog pricefwdH educpc hhsize childu5_count Sick_2wks_pcnt mostpatient mostrisk 

*Use follow-up values for some covariates that are more appropriate
global covars2 electricityhr caste_general age_hh educhh chirag_strata

foreach var of global covars2 {	
	bysort hh_id: egen m`var' = max(`var')
	replace `var' = m`var' if `var' == . & surveyround == 1
	drop m`var'
	}
	
foreach var of global covars {	
	gen `var'_temp = . if surveyround == 1
	replace `var'_temp = `var' if surveyround == 0
	bysort hh_id: egen m`var' = max(`var'_temp)
	replace m`var' = `var' if surveyround == 1 & m`var' == .
	replace `var' = . if surveyround == 1
	replace `var' = m`var' if surveyround == 1
	drop `var'_temp m`var'
	}
*/
	
*Fill in missings
foreach var of global basicvar {	
	bysort surveyround uniquegrp: egen med`var' = median(`var')
	replace `var' = med`var' if `var' == . & surveyround == 1
	drop med`var'
	}

foreach var of global addvar {	
	bysort surveyround uniquegrp: egen med`var' = median(`var')
	replace `var' = med`var' if `var' == . & surveyround == 1
	drop med`var'
	}

*Basic adoption results (Table 6)

log using adoption_classes_d.log, replace

reg StoveBuy1stvisit treatment maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb6_d, dec(4) cttop(Basic) se excel append slow(500)

test maxlclass1 = maxlclass2

reg StoveBuy1stvisit treatment Rebtreat maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb6_d, dec(4) cttop(+Rebate) se excel append slow(500)

test maxlclass1 = maxlclass2

reg StoveBuy1stvisit treatment Rebtreat $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb6_d, dec(4) cttop(+ALL) se excel append slow(500)

test maxlclass1 = maxlclass2

reg StoveBuy treatment maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb6_d, dec(4) cttop(+ALL) se excel append slow(500)

test maxlclass1 = maxlclass2

reg StoveBuy treatment Rebtreat $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb6_d, dec(4) cttop(+ALL) se excel append slow(500)

test maxlclass1 = maxlclass2

*F-tests

*Explanatory power of classes

reg StoveBuy1stvisit treatment Rebtreat $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0 
est store b

reg StoveBuy1stvisit treatment Rebtreat $basicvar $addvar if surveyround == 1 & lostin2013 == 0 
est store a
ftest a b

*Explanatory power of controls alone

reg StoveBuy1stvisit treatment Rebtreat $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0 
est store b

reg StoveBuy1stvisit treatment Rebtreat maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0 
est store a
ftest a b

*Use analysis

reg intervention_stove_use maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb6_d, dec(4) cttop(Basic) se excel append slow(500)
reg intervention_stove_use RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb6_d, dec(4) cttop(+ALL) se excel append slow(500)
erase DCE_Tb6_d.txt

*Predicting adoption results (Table 7)

gen BuyGway_all = BuyGway
gen BuyGcoil_all = BuyGcoil
replace BuyGway_all = 0 if treatment == 0 | BuyGway_all == .
replace BuyGcoil_all = 0 if treatment == 0 | BuyGcoil_all == .

global classcontrols relativewlth age_hh female_hh caste_general credit save_possible toilet smoke_unsafe cleanstove_aware  
foreach var of global classcontrols {	
	bysort hh_id: egen `var'0_temp = max(`var') if surveyround == 1
	bysort hh_id: egen `var'0_temp2 = max(`var'0_temp)
	bysort surveyround: egen `var'0_temp3 = median(`var') if surveyround == 1
	bysort hh_id: egen `var'0_temp4 = max(`var'0_temp3)
	gen `var'0 = `var'0_temp2
	replace `var'0 = `var'0_temp4 if `var'0 == .
	drop `var'0_temp `var'0_temp2 `var'0_temp3 `var'0_temp4
	}
	
global classcontrols_0 relativewlth0 age_hh0 female_hh0 caste_general0 credit0 save_possible0 toilet0 smoke_unsafe0 ///
 cleanstove_aware0

ivregress 2sls StoveBuy1stvisit treatment Rebtreat (class1 class2 = $classcontrols_0) if surveyround == 1 & lostin2013 == 0, vce(cl uniquegrp) first
outreg2 using DCE_Tb7_d, dec(4) cttop(+Rebate) se excel append slow(500)
ivregress 2sls StoveBuy treatment Rebtreat (class1 class2 = $classcontrols_0) if surveyround == 1 & lostin2013 == 0, vce(cl uniquegrp) first
outreg2 using DCE_Tb7_d, dec(4) cttop(+Rebate) se excel append slow(500)
ivregress 2sls BuyGway_all treatment Rebtreat (class1 class2 = $classcontrols_0) if surveyround == 1 & lostin2013 == 0, vce(cl uniquegrp) first
outreg2 using DCE_Tb7_d, dec(4) cttop(Gway) se excel append slow(500)
ivregress 2sls BuyGcoil_all treatment Rebtreat (class1 class2 = $classcontrols_0) if surveyround == 1 & lostin2013 == 0, vce(cl uniquegrp) first
outreg2 using DCE_Tb7_d, dec(4) cttop(Gcoil) se excel append slow(500)
erase DCE_Tb7_d.txt

*Stove-wise results  (Table 8)

mlogit StoveType1stvisit maxlclass1 maxlclass2 if treatment == 1 & surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
margins, dydx(*) predict(outcome(1)) atmean
margins, dydx(*) predict(outcome(2)) atmean
outreg2 using DCE_Tb8_d, dec(4) cttop(Basic) se excel append slow(500)
mlogit StoveType1stvisit RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if treatment == 1 & surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
margins, dydx(*) predict(outcome(1)) atmean
margins, dydx(*) predict(outcome(2)) atmean
outreg2 using DCE_Tb8_d, dec(4) cttop(+ALL) se excel append slow(500)

replace daily_Gcoil = 0 if daily_Gcoil == .
replace daily_Gway = 0 if daily_Gway == .

reg daily_Gcoil RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb8_d, dec(4) cttop(Electric ICS) se excel append slow(500)
reg daily_Gway RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_Tb8_d, dec(4) cttop(BICS+ALL) se excel append slow(500)
erase DCE_Tb8_d.txt

log close

save "H:\Cook stove research\Stoves TRAC\Impacts analysis\Latent class analysis\Submissions\JAERE\Replication files\JAERE_data_analysis.dta", replace

clear

****Other Appendix results (Appendices C and E)

**Rebate D-stats and balance tests - For Appendix Table C1

use "H:\Cook stove research\Stoves TRAC\Impacts analysis\Latent class analysis\Submissions\JAERE\Replication files\JAERE_data.dta"

log using balancechecks_rebate.log, replace

global balancevarsrebfull pavedroads docdist bankfac chirag_strata hhsize educhh educpc female_hh BPL scst ///
 Sick_2wks_pcnt relativewlth credit save_possible electricityhr ln_expend cellphone rooms toilet ///
 agri_land mostpatient mostrisk medorbetterimpact smoke_unsafe tradstove impstove hr_tradst fuel_fwdkg ///
 totalfuelexp 
 
for any 1 2 3: gen rebX = 1 if Rebate == X & treatment == 1
for any 1 2 3: replace rebX = 0 if Rebate~= X & treatment == 1
for any 1 2 3: replace rebX = . if surveyround == 0

bysort hh_id: egen mreb1 = max(reb1)
replace reb1 = mreb1 if reb1 == .
drop mreb1

bysort hh_id: egen mreb2 = max(reb2)
replace reb2 = mreb2 if reb2 == .
drop mreb2

bysort hh_id: egen mreb3 = max(reb3)
replace reb3 = mreb3 if reb3 == .
drop mreb3

sum $balancevarsfull if surveyround == 0 & reb1 == 1
sum $balancevarsfull if surveyround == 0 & reb2 == 1
sum $balancevarsfull if surveyround == 0 & reb3 == 1

*By rebate level - Rebate 1 vs. others
iebaltab $balancevarsrebfull if surveyround == 0 & treatment == 1, grpvar(reb1) vce(cluster uniquegrp) normdiff save("balancetablereb1.xlsx")
iebaltab $balancevarsrebfull if surveyround == 0 & treatment == 1, grpvar(reb2) vce(cluster uniquegrp) normdiff save("balancetablereb2.xlsx")
iebaltab $balancevarsrebfull if surveyround == 0 & treatment == 1, grpvar(reb3) vce(cluster uniquegrp) normdiff save("balancetablereb3.xlsx")

foreach var of varlist $balancevarsrebfull {
	reg `var' treatment if surveyround == 0, vce(cl uniquegrp) 
	} 
	
log close

clear

**Rebate-class interactions (Table C3)

use "H:\Cook stove research\Stoves TRAC\Impacts analysis\Latent class analysis\Submissions\JAERE\Replication files\JAERE_data_analysis.dta"

reg StoveBuy1stvisit treatment maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbC3_d, dec(5) cttop(Basic) se excel append slow(500)
reg StoveBuy1stvisit treatment $basicvar $addvar maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbC3_d, dec(5) cttop(+All Controls) se excel append slow(500)
reg StoveBuy treatment maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbC3_d, dec(5) cttop(Basic-All) se excel append slow(500)
reg StoveBuy treatment $basicvar $addvar maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbC3_d, dec(5) cttop(+All Controls-All) se excel append slow(500)
erase DCE_TbC3_d.txt

**Stove choice at end of intervention (Table C4)

log using tablec4.log, replace

mlogit StoveType maxlclass1 maxlclass2 if treatment == 1 & surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
margins, dydx(*) predict(outcome(1)) atmean
margins, dydx(*) predict(outcome(2)) atmean
outreg2 using DCE_TbC4_d, dec(4) cttop(Basic) se excel append slow(500)

mlogit StoveType RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if treatment == 1 & surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
margins, dydx(*) predict(outcome(1)) atmean
margins, dydx(*) predict(outcome(2)) atmean
outreg2 using DCE_TbC4_d, dec(4) cttop(+ALL) se excel append slow(500)

mlogit StoveType treatment $basicvar $addvar maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if treatment == 1 & surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
margins, dydx(*) predict(outcome(1)) atmean
margins, dydx(*) predict(outcome(2)) atmean
outreg2 using DCE_TbC4_d, dec(4) cttop(+ALL) se excel append slow(500)

erase DCE_TbC4_d.txt

log close

**Stove use conditional on purchase (Table C5)

log using tablec5.log, replace

reg intervention_stove_use maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0 & StoveBuy ~= 0, cl(uniquegrp)
outreg2 using DCE_TbC5_d, dec(4) cttop(Basic) se excel append slow(500)
reg intervention_stove_use RebateAmt maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0 & StoveBuy ~= 0, cl(uniquegrp)
outreg2 using DCE_TbC5_d, dec(4) cttop(+Rebate) se excel append slow(500)
reg intervention_stove_use RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0 & StoveBuy ~= 0, cl(uniquegrp)
outreg2 using DCE_TbC5_d, dec(4) cttop(+ALL) se excel append slow(500)

reg daily_Gcoil RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0 & StoveType == 2, cl(uniquegrp)
outreg2 using DCE_TbC5_d, dec(4) cttop(Electric ICS) se excel append slow(500)
reg daily_Gway RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0 & StoveType == 1, cl(uniquegrp)
outreg2 using DCE_TbC5_d, dec(4) cttop(BICS+ALL) se excel append slow(500)

erase DCE_TbC5_d.txt

log close

**Using class probabilities instead of indicator variables 

/*Discrete or continuous class probabilities: Alternative definition uses continuous lclassX probability ///
rather than maxlclassX dummy variable*/
*log using adoption_classes_p.log, replace 
for any 1 2 3: replace maxlclassX = pclassX
for any 1 2 3: replace maxlclassX = maxlclassX*treatment
for any 1 2 3: replace RcX = RebateAmt*maxlclassX*treatment

*Table 6 equivalent (Table E1)

reg StoveBuy1stvisit treatment maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE1_p, dec(4) cttop(Basic) se excel append slow(500)
reg StoveBuy1stvisit treatment Rebtreat maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE1_p, dec(4) cttop(+Rebate) se excel append slow(500)
reg StoveBuy1stvisit treatment Rebtreat $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE1_p, dec(4) cttop(+ALL) se excel append slow(500)
reg StoveBuy treatment maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE1_p, dec(4) cttop(+ALL) se excel append slow(500)
reg StoveBuy treatment Rebtreat $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE1_p, dec(4) cttop(+ALL) se excel append slow(500)

reg intervention_stove_use maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE1_p, dec(4) cttop(Basic) se excel append slow(500)
reg intervention_stove_use RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE1_p, dec(4) cttop(+ALL) se excel append slow(500)
erase DCE_TbE1_p.txt

*Rebate-class interactions - Table C3 equivalent (Table E2)

reg StoveBuy1stvisit treatment maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE2_p, dec(5) cttop(Basic) se excel append slow(500)
reg StoveBuy1stvisit treatment $basicvar $addvar maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE2_p, dec(5) cttop(+All Controls) se excel append slow(500)
reg StoveBuy treatment maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE2_p, dec(5) cttop(Basic-All) se excel append slow(500)
reg StoveBuy treatment $basicvar $addvar maxlclass1 maxlclass2 Rc1 Rc2 Rc3 if surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE2_p, dec(5) cttop(+All Controls-All) se excel append slow(500)
erase DCE_TbE2_p.txt

*Stove-wise results - Table 8 equivalent (Table E3)

log using tablee3.log, replace

mlogit StoveType1stvisit maxlclass1 maxlclass2 if treatment == 1 & surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
margins, dydx(*) predict(outcome(1)) atmean
margins, dydx(*) predict(outcome(2)) atmean
outreg2 using DCE_TbE3_p, dec(4) cttop(Basic) se excel append slow(500)
mlogit StoveType1stvisit RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if treatment == 1 & surveyround == 1 & lostin2013 == 0, cl(uniquegrp)
margins, dydx(*) predict(outcome(1)) atmean
margins, dydx(*) predict(outcome(2)) atmean
outreg2 using DCE_TbE3_p, dec(4) cttop(+ALL) se excel append slow(500)
reg daily_Gcoil RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE3_p, dec(4) cttop(Electric ICS) se excel append slow(500)
reg daily_Gway RebateAmt $basicvar $addvar maxlclass1 maxlclass2 if surveyround == 1 & treatment == 1 & lostin2013 == 0, cl(uniquegrp)
outreg2 using DCE_TbE3_p, dec(4) cttop(BICS+ALL) se excel append slow(500)
erase DCE_TbE3_p.txt

log close

clear

